<?php
/**
 * Modelo CRUD de lista de destinatários para newsletter
 * @author Emanuel Melo e Renato Lenz @ PC4 Team
 */
class PC4_Crud_Newsletter_Lista extends PC4_Crud_Abstrato_Rastreado {
	
	/**
	 * Construtor
	 */
	function __construct($tabela = 'listas') {
		parent::__construct($tabela);
	}
	
	/**
	 * Verifica os campos estão corretos
	 * @param array $campos
	 * @param int $id
	 * @return array com mensagens de erros
	 */
	function valida($campos, $id=0) {
		$erros = array();
		
		if (empty($campos["id_clientes"])) {
			$erros["id_clientes"] = "Escolha um cliente primeiro.";
		}
		if (empty($campos["nome"])) {
			$erros["nome"] = "&Eacute; necess&aacute;rio informar um nome.";
		}
		else {
			$q = $this->consulta("nome = '{$campos["nome"]}' AND id_clientes = " . $campos["id_clientes"] . " AND id <> $id", 1, 1);
			
			if (!empty($q)) {
				$erros["nome"] = "Esta lista já existe em nossa base de dados.";
			}
		}
		
		return $erros;
	}
	
	/**
	 * Recebe um array com os campos e insere na base de dados o novo registro
	 * @param array $umRegistro
	 * @return O id inserido ou um array com mensagens de erro
	 */
	function insere($registro) {
		$destinatarios = $registro['destinatarios'];
		unset($registro['destinatarios']);
		
		$id_lista = parent::insere($registro);
		
		if (is_numeric($id_lista)) {
			foreach ((array)$destinatarios as $id_destinatario) {
				$d = array(
					"id_destinatarios" => $id_destinatario,
					"id_listas" => $id_lista
				);
				$this->db->insert("listas_rel_destinatarios", $d);
			}
		}

		return $id_lista;
		
	}

	/**
	 * 
	 * @param array $umRegistro
	 * @param int $id
	 * @return devolve um array de erros (nomeCampo/erro) para cada campo que não passou da validação 
	 */
	function edita($registro, $id) {
		$destinatarios = $registro['destinatarios'];
		unset($registro['destinatarios']);
		
		$erros = parent::edita($registro, $id);
		
		if (empty($erros)) {
			$this->db->delete("listas_rel_destinatarios", "id_listas = $id");
			foreach ((array)$destinatarios as $id_destinatario) {
				$d = array(
					"id_destinatarios" => $id_destinatario,
					"id_listas" => $id
				);
				$this->db->insert("listas_rel_destinatarios", $d);
			}
		}
		return $erros;
	}
	
	/**
	 * Recupera um registro no banco de dados
	 * @param $id
	 * @return um registro
	 */
	function ve($id) {
		$r = parent::ve($id);
		$mDestinatarios = new PC4_Crud_Newsletter_Destinatario();
		$r->destinatarios = $mDestinatarios->listaDaLista($id);
		return $r;
	}
	
	/**
	 * Apaga um registro
	 * @param int $id
	 * @return int Linhas afetadas
	 */
	function apaga($id) {
		$this->db->delete("listas_rel_destinatarios", "id_listas = '$id'");
		return parent::apaga($id);
		
	}

	/**
	 * Apaga todas as listas de um cliente
	 * @param int $id_cliente
	 * @return int Linhas afetadas 
	 */
	function apagaPorCliente($id_cliente) {
		$this->db->delete("listas_rel_destinatarios", "id_listas IN (SELECT id FROM listas WHERE id_clientes = $id_cliente)");
		$this->db->delete($this->tabela, "id_clientes = '$id_cliente'");
		
		return $this->db->affected_rows();
	}
	
	/**
	 * Retorna dados necessários para montar documento excel com
	 * os destinatários e os respectivos descritores e valores de
	 * suas palavras-chave
	 * @param int $id
	 */
	function exportaExcel($id, $modelo) {
		$destinatarios_model = new PC4_Crud_Newsletter_Destinatario();
		$excel_model = new PC4_Util_Excel();
		
		$listas = $destinatarios_model->listaOrganizada($id, "0,1");

		$rs = current($listas);
		
		if (!empty($rs)) {
			$r = current($rs);
			$cabecalhos = array_keys($r->descritores);
			$cabecalhos = array_combine($cabecalhos, $cabecalhos);
			array_unshift($cabecalhos, $destinatarios_model->campo_contato);
			
		}

		if ($modelo) {
			return $excel_model->exporta(array(), $cabecalhos, "csv");
		}

		$tabelas = "";
		foreach ($listas as $nome_lista => $rs) {
			$registros = array();
			foreach ($rs as $c => $r) {
				$registro = $r->descritores;
				array_unshift($registro, $destinatarios_model->getContato($r));
				$registros[] = $registro;
			}
			$tabelas .= $excel_model->exportaTabela($nome_lista, $registros, $cabecalhos);
		}
		
		$excel_model->enviaHeaders();

		return $tabelas;
		
	}
}
?>